//
//  SKOAuthViewController.swift
//  WeiboProjectYL
//
//  Created by yanli on 16/7/10.
//  Copyright © 2016年 mountainPassCell. All rights reserved.
//

import UIKit

import SVProgressHUD
import AFNetworking

//  微博appKey 2452629816  我的
//  申请应用时分配的AppKey  1182785320  老师
let WeiboAppKey = "2452629816"
//  微博appsecret 8a2c33bfb260d340b454e2da22ff6841  我的
//  1606843f6c67acf9cd0771db17fc1ac2    老师
let WeiboAppSecret = "8a2c33bfb260d340b454e2da22ff6841"
//  微博授权回调页 授权回调地址
let WeiboRedirect_Uri = "http://www.itcast.cn"


class SKOAuthViewController: UIViewController {
    
    // MARK: -- 懒加载控件
    private lazy var webView: UIWebView = UIWebView()
    
    override func loadView() {
        //遵守代理
        webView.delegate = self
        //自定义视图
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = UIColor.whiteColor()
        
        
        requestOAuthLogin()
        setNavUI()
       
    }

    
    private func requestOAuthLogin() {
        //请求地址
        let url = "https://api.weibo.com/oauth2/authorize?client_id=\(WeiboAppKey)&redirect_uri=\(WeiboRedirect_Uri)"
        print(url)
        // 准备请求对象
        let request = NSURLRequest(URL: NSURL(string: url)!)
        
        // 加载请求
        webView.loadRequest(request)
        
    }
    
    //设置 导航栏 左右两变
    private func setNavUI() {
        navigationItem.title = "微博登录"
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", target: self, action: "cancelBtn")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: "autoFillBtn")
        
    }
    
    // MARK: -- 点击事件
    //第三方登录 的网页 界面 左上角 取消按钮
    @objc private func cancelBtn() {
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    //自动填充按钮
    @objc private func autoFillBtn() {
        
        //执行JS代码 ,填充 账号密码信息
    webView.stringByEvaluatingJavaScriptFromString("document.getElementById('userId').value = 'sanguang520@163.com'; document.getElementById('passwd').value = '_iOS5203344587'")
        
    }
    
    
    // MARK: --  代码已经抽取CZUserAccountViewModel
    
    
    // 通过授权码(code)获取accesstoken令牌
//    private func requestAccesstoken(code: String) {
//        
//        //创建单例
//        SKNetworkTools.shareTools.requestAccesstoken(code) { (response, error) -> () in
//            //如果有错误 直接返回
//            if error != nil {
//                print(error)
//                return
//            }
//            
//            // 代码执行到此,成功的回调
//            guard let dic = response as? [String: AnyObject] else {
//                print("不是一个正确的json格式")
//                return
//            }
//            
//            //  代码执行到此, dic一定有值,并且是符合我们需要的类型
//            let userAccount = SKUserAccount(dic: dic)
//            
//            // 通过accessToken和uid获取用户信息
//            self.requestUserInfo(userAccount)
//            
//            
//            
//        }
    
        
//        //准备接口地址
//        let url = "https://api.weibo.com/oauth2/access_token"
//        //准备参数
//        let params = [
//            "client_id": WeiboAppKey,
//            "client_secret": WeiboAppSecret,
//            "grant_type": "authorization_code",
//            "code": code,
//            "redirect_uri": WeiboRedirect_Uri
//        ]
//        
//        let sessionManager = AFHTTPSessionManager()
//        sessionManager.responseSerializer.acceptableContentTypes?.insert("text/plain®")
//        //发送 post 请求
//        sessionManager.POST(url, parameters: params, progress: nil, success: { (_, response) -> Void in
//            
//            
//            }) { (_, error) -> Void in
//                
//                
//        }
//        
//        
//    }
    
    
    
    // MARK: --  代码已经抽取CZUserAccountViewModel

    
    // 获取用户信息
//    private func requestUserInfo(userAccount: SKUserAccount) {
//        
//        //使用封装好的 获取用户信息 网络请求 尾随闭包
//        SKNetworkTools.shareTools.requestUserInfo(userAccount) { (response, error) -> () in
//            //如果有错误
//            if error != nil {
//                print(error)
//                return
//            }
//            
//            guard let dic = response as? [String: AnyObject] else {
//                print("不是一个正确json格式")
//                return
//            }
//            
//            //  代码执行到此字典一定有值
//            
//            let name = dic["name"]
//            let avatar_large = dic["avatar_large"]
//            
//            //  设置用户名和头像
//            userAccount.name = name as? String
//            userAccount.avatar_large = avatar_large as? String
//            // 保存用户对象
//            userAccount.saveUserAccount()
//            print(userAccount)
//        }
//    }
    
    

}



extension SKOAuthViewController: UIWebViewDelegate {
    
    //将要加载请求 http://www.itcast.cn/?code=f6cea50fbbf21cc1c7ce4a3030966afe
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        guard let url = request.URL else {
            return false
        }
        
        //  代码执行到此,我们的url一定有值
        //  获取url的绝对地址
        if !url.absoluteString.hasPrefix(WeiboRedirect_Uri) {
            return true
        }
        
        // 代码执行到此就是我们需要关心的url字符串
        
        if let query = url.query where query.hasPrefix("code=") {
            // 截取 code
            let code = query.substringFromIndex("code=".endIndex)
            
            print("我想要的code: " + code)
            
//            requestAccesstoken(code)  //抽取了方法之后注释掉
            
            //创建 单例
            SKUserAccountViewModel.shareUserAccount.requestAccesstoken(code, callBack: { (isSuccess) -> () in
                //判断是否登录成功
                if isSuccess {
                    print("登陆成功")
                    self.dismissViewControllerAnimated(false, completion: { () -> Void in
                        // 发送通知,释放资源 释放第三方登录控制器
                        // 将自己 第三方登录 控制器传过去
                        NSNotificationCenter.defaultCenter().postNotificationName(SwitchRootVCNotification, object: self)
                    })
                    
                    
                } else {
                    print("登录失败")
                }
            })
            
            
            
        } else { //添加取消按钮
            // 进入取消回调页

            dismissViewControllerAnimated(true, completion: nil)
        }
        
        return false
    }
    
    
    //开始加载
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    //加载完成
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    //加载失败
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        SVProgressHUD.dismiss()
    }
    
    
}





